جزوه · فصل هشتم · جلسه ۷۷ · تنظیم DNS ← بازگشت به فهرست
📘 فصل هشتم · جلسه ۷۷ تنظیم DNS
📅 تاریخ: دوشنبه، ۲ شهریور ۱۴۰۵ 👤 مدرس: محمد عابدینی 🐚 Zsh · 🐧 Debian (کالی) · 📦 Red Hat
این جلسه یکی از مباحث عملی مهم در LPIC و RHCSA است. دو روش تنظیم DNS (سنتی و systemd-resolved) و تفاوت آنها حتماً در آزمون می‌آید.
🌐 قبل از شروع، یه مثال ساده:

فرض کن می‌خوای یه وب‌سایت مثل google.com رو باز کنی. مرورگر نمی‌دونه آدرس IP گوگل چیه، پس از دفترچه تلفن DNS می‌پرسه. این دفترچه تلفن رو توی لینوکس با فایل /etc/resolv.conf یا systemd-resolved تنظیم می‌کنی. این جلسه بهت یاد میده چطور این کار رو انجام بدی.

▍ DNS چیست و چرا به آن نیاز داریم؟

DNS (Domain Name System) سرویسی است که نام‌های دامنه (مثل google.com) را به آدرس IP (مثل 172.217.16.46) تبدیل می‌کند. بدون DNS، باید همه آدرس‌های IP را به خاطر بسپاریم که غیرممکن است! برای تنظیم DNS در لینوکس، دو روش اصلی وجود دارد:

🔑 نکته کلیدی: DNS مثل دفترچه تلفن اینترنت است. بدون آن، نمی‌توانید با نام دامنه به وب‌سایت‌ها متصل شوید.

▍ روش اول: تنظیم DNS با فایل /etc/resolv.conf (روش سنتی)

این روش قدیمی‌ترین و ساده‌ترین روش تنظیم DNS است. با ویرایش فایل /etc/resolv.conf می‌توانید سرورهای DNS مورد نظر را اضافه کنید.

🔹 مرحله ۱: باز کردن فایل resolv.conf

┌──(ya3in㉿kali)-[~] └─$ sudo nano /etc/resolv.conf

توضیح: nano یک ویرایشگر ساده است. می‌توانید از vi یا vim نیز استفاده کنید.

🔹 مرحله ۲: افزودن سرورهای DNS

خطوط زیر را به فایل اضافه کنید:

search isp.com nameserver 8.8.8.8 nameserver 8.8.4.4 nameserver 1.1.1.1

توضیح:

  • search → دامنه پیش‌فرض برای جستجو (اختیاری).
  • nameserver → آدرس IP سرور DNS. می‌توانید چندین سرور اضافه کنید.

🔹 مرحله ۳: ذخیره و خروج

فایل را ذخیره کنید (Ctrl+O در nano) و خارج شوید (Ctrl+X).

🔹 مرحله ۴: تست DNS

┌──(ya3in㉿kali)-[~] └─$ ping google.com PING google.com (172.217.16.46) 56(84) bytes of data. 64 bytes from 172.217.16.46: icmp_seq=1 ttl=64 time=2.34 ms

توضیح: اگر ping google.com کار کند، یعنی DNS به درستی تنظیم شده است.

نکته امتحانی: در روش سنتی، فایل /etc/resolv.conf مستقیماً ویرایش می‌شود. اما در سیستم‌های مدرن، این فایل ممکن است توسط NetworkManager یا systemd-resolved بازنویسی شود.
⚠️ هشدار مهم!

در سیستم‌هایی که از NetworkManager یا systemd-resolved استفاده می‌کنند، تغییرات /etc/resolv.conf ممکن است موقت باشند و پس از ری‌بوت یا راه‌اندازی مجدد NetworkManager از بین بروند. برای تغییر دائمی، از روش دوم استفاده کنید.

▍ روش دوم: تنظیم DNS با systemd-resolved (روش مدرن)

systemd-resolved یک سرویس مدرن برای مدیریت DNS در سیستم‌های مبتنی بر systemd است. این روش دائمی و مدیریت‌شده است.

🔹 مرحله ۱: فعال‌سازی systemd-resolved

┌──(ya3in㉿kali)-[~] └─$ sudo systemctl enable --now systemd-resolved

توضیح: فعال‌سازی و راه‌اندازی سرویس systemd-resolved.

سرویس systemd-resolved وظیفه مدیریت DNS را در سیستم‌های مدرن بر عهده دارد.

🔹 مرحله ۲: ایجاد فایل پیکربندی DNS

یک فایل جدید در /etc/systemd/resolved.conf.d/ ایجاد کنید:

┌──(ya3in㉿kali)-[~] └─$ sudo mkdir -p /etc/systemd/resolved.conf.d/ └─$ sudo nano /etc/systemd/resolved.conf.d/dns_servers.conf

خطوط زیر را به فایل اضافه کنید:

[Resolve] DNS=8.8.8.8 8.8.4.4 1.1.1.1 Domains=~.

توضیح:

  • DNS= → لیست سرورهای DNS (با فاصله جدا کنید).
  • Domains=~. → دامنه پیش‌فرض (اختیاری).

🔹 مرحله ۳: راه‌اندازی مجدد سرویس

┌──(ya3in㉿kali)-[~] └─$ sudo systemctl restart systemd-resolved

🔹 مرحله ۴: بررسی وضعیت DNS

┌──(ya3in㉿kali)-[~] └─$ resolvectl status Global DNS Servers: 8.8.8.8 8.8.4.4 1.1.1.1 DNSSEC Setting: allow-downgrade DNSSEC supported: yes

توضیح: resolvectl status وضعیت DNS را نمایش می‌دهد.

• تنظیم DNS با resolvectl برای یک رابط خاص

┌──(ya3in㉿kali)-[~] └─$ sudo resolvectl dns eth0 8.8.8.8 8.8.4.4 └─$ sudo resolvectl domain eth0 ~.

توضیح: تنظیم DNS برای رابط شبکه eth0 به‌طور خاص.

نکته امتحانی: resolvectl ابزار خط فرمان برای مدیریت systemd-resolved است.

▍ تنظیم DNS با NetworkManager

اگر از NetworkManager استفاده می‌کنید، می‌توانید DNS را از طریق nmcli یا nmtui تنظیم کنید.

• با nmcli

┌──(ya3in㉿kali)-[~] └─$ nmcli connection show NAME UUID TYPE DEVICE eth0 1ea6bded-eb13-4e48-af4e-47a72e9794e8 ethernet eth0 └─$ sudo nmcli con mod eth0 ipv4.dns "8.8.8.8 8.8.4.4" └─$ sudo nmcli con down eth0 && sudo nmcli con up eth0

توضیح: تنظیم DNS برای اتصال eth0 با nmcli و راه‌اندازی مجدد اتصال.

• با nmtui

nmtui را اجرا کنید، به Edit a connection بروید، اتصال مورد نظر را انتخاب کنید، در بخش IPv4 Configuration یا IPv6 Configuration، گزینه DNS servers را پیدا کنید و آدرس DNS را وارد کنید.

برای تنظیم دائمی DNS در سیستم‌های با NetworkManager، از nmcli con mod استفاده کنید.

▍ مقایسه دو روش تنظیم DNS

ویژگی روش سنتی (resolv.conf) روش مدرن (systemd-resolved)
دائمی بودن ❌ موقت (در بسیاری از سیستم‌ها) ✅ دائمی
مدیریت خودکار ❌ خیر ✅ بله (با systemd)
پشتیبانی از چندین رابط ❌ خیر ✅ بله (با resolvectl)
سادگی ✅ بسیار ساده ⚡ کمی پیچیده‌تر
توصیه در سیستم‌های مدرن ❌ خیر ✅ بله
✅ جمع‌بندی نهایی:
  • روش سنتی: ویرایش مستقیم /etc/resolv.conf با nameserver 8.8.8.8
  • روش مدرن: استفاده از systemd-resolved و تنظیم با resolvectl یا فایل پیکربندی
  • روش NetworkManager: استفاده از nmcli con mod برای تنظیم DNS
  • دستورات مهم: resolvectl status (مشاهده)، resolvectl dns (تنظیم)، nmcli con mod (تنظیم در NetworkManager)
  • تست DNS: با ping google.com یا nslookup google.com بررسی کنید.